/*
 * Tencent is pleased to support the open source community by making 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community Edition) available.
 * Copyright (C) 2017-2019 THL A29 Limited, a Tencent company. All rights reserved.
 * Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://opensource.org/licenses/MIT
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 *
 */

package com.tencent.devops.common.api.util

import java.io.File
import java.net.URL
import java.net.URLClassLoader

object ClassUtil {
    fun getClass(jarFile: File, className: String): Class<*> {
        val url = jarFile.toURI().toURL()
        val urlClassLoader = ClassLoader.getSystemClassLoader() as URLClassLoader
        val urlClassLoaderClazz = URLClassLoader::class.java
        val method = urlClassLoaderClazz.getDeclaredMethod("addURL", URL::class.java)
        method.isAccessible = true
        method.invoke(urlClassLoader, url)

        return urlClassLoader.loadClass(className)
    }

    fun isInheritedFrom(subClass: Class<*>, parentClass: Class<*>): Boolean {
        return parentClass.isAssignableFrom(subClass)
    }
}